热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

花精|来使_从零开始配置vim(31)——git配置

篇首语:本文由编程笔记#小编为大家整理,主要介绍了从零开始配置vim(31)——git配置相关的知识,希望对你有一定的参考价值。很抱歉又拖更了这么久了,在

篇首语:本文由编程笔记#小编为大家整理,主要介绍了从零开始配置vim(31)——git 配置相关的知识,希望对你有一定的参考价值。


很抱歉又拖更了这么久了,在这个新公司我想快速度过试用期,所以大部分的精力主要花在日常工作上面。但是这个系列还是得更新下去,平时只能抽有限的业余时间来准备。这就导致我写这些文章就慢了一些。
废话不多说,咱们正式开始有关git相关的配置。这些配置都是根据我自身使用习惯来定义的,不一定符合各位的习惯,各位可以根据自身的习惯来调整


gitsigns

第一个要推荐的插件是 gitsigns。就像它的名字一样,该插件可以将最近的更改以标签的形式展现出来方便我们查看。我们可以使用这样的代码进行安装 use 'lewis6991/gitsigns.nvim' 。需要注意最新的版本需要 neovim 的版本在0.7 以上。

安装完成之后我们通过配置 require('gitsigns').setup()来使用它。这样我们就可以通过 Gitsigns toggle_signs来打开或者关闭符号显示了。

除了采用最基本的符号显示以外,它还可以对改变位置的行号进行标记以及高亮显示变更的行。这两个功能可以通过 Gitsigns toggle_numl和 Gitsigns toggle_linel来打开,打开之后显示如下:

从图中可以看到,更改行行号被用绿色显示了出来并且更改行进行了高亮显示

另外它还有其他的显示效果:
它主要的一些显示功能主要有下面几个:


  • toggle_signs: 显示变更记录
  • toggle_numl: 显示变更行号
  • toggle_linel:高亮变更的行
  • toggle_delete: 显示被删除的行,以红色背景高亮显示
  • toggle_word_diff: 在两行分别显示修改前和修改后的内容
  • toggle_current_line_blame: 在对应行后面显示提交记录

我们将所有的这些功能都打开将得到这么一个效果

是不是看着有点乱?这是我修改了一处的,一旦修改多了看着会更混乱。所以我自己的经验告诉我在这个buffer里面最好是只打开 signsnumllinelcurrent_line_blame的功能,其他的都关掉。也就是在当前buffer中只显示现在的代码,然后辅助以简单的符号来显示哪行是新加的,哪行被删除了,哪行被修改了,至于修改前是什么样子的,我可以通过其他方式来查阅。所有内容都在一个buffer 中显示会比较乱,不利于阅读代码。

我们可以通过配置将我们要显示的内容进行定义,也可以定义使用何种图标来表示修改记录。我们采用如下的配置

gitsigns.setup(
signs =
add = hl = 'GitSignsAdd' , text = '+', numhl='GitSignsAddNr' , linehl='GitSignsAddLn',
change = hl = 'GitSignsChange', text = '│', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn',
delete = hl = 'GitSignsDelete', text = '-', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn',
topdelete = hl = 'GitSignsDelete', text = '-', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn',
untracked = hl = 'GitSignsAdd', text = '+', numhl='GitSignsAddNr' , linehl='GitSignsAddLn',
changedelete = hl = 'GitSignsChange', text = '~', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn',
,
signcolumn = true, -- Toggle with `:Gitsigns toggle_signs`
numhl = true, -- Toggle with `:Gitsigns toggle_numhl`
linehl = true, -- Toggle with `:Gitsigns toggle_linehl`
word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff`
watch_gitdir =
interval = 1000,
follow_files = true
,
attach_to_untracked = true,
current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame`
current_line_blame_opts =
virt_text = true,
virt_text_pos = 'eol', -- 'eol' | 'overlay' | 'right_align'
delay = 1000,
ignore_whitespace = false,
,
current_line_blame_formatter = ', -

',
sign_priority = 6,
update_debounce = 100,
status_formatter = nil, -- Use default
max_file_length = 40000, -- Disable if file is longer than this (in lines)
preview_config =
-- Options passed to nvim_open_win
border = 'single',
style = 'minimal',
relative = 'cursor',
row = 0,
col = 1
,
yadm =
enable = false
,
)

其中大部分都是官方给出的默认配置,我只是在此基础之上改了 signs在各种状态下显示的图标,以及显示哪些内容。主要是使用 + 来表示新增、| 来表示修改、- 表示删除。

除了显示以外它有一个重要的功能就是在各种修改状态之间跳转,例如调用 next_hunk来跳转到下一个更改位置。并且它也集成了一些git的操作。我们对常用的操作定义一些快捷键

on_attach = function()
vim.api.nvim_set_keymap("n", "gj", "Gitsigns next_hunk", silent = true, noremap = true)
vim.api.nvim_set_keymap("n", "gk", "Gitsigns prev_hhunk", silent = true, noremap = true)
vim.api.nvim_set_keymap('n', 'hs', ':Gitsigns stage_hunk', silent = true, noremap = true)
vim.api.nvim_set_keymap('v', 'hs', ':Gitsigns stage_hunk', silent = true, noremap = true)
vim.api.nvim_set_keymap('n', 'hr', ':Gitsigns reset_hunk', silent = true, noremap = true)
vim.api.nvim_set_keymap('v', 'hr', ':Gitsigns reset_hunk', silent = true, noremap = true)
vim.api.nvim_set_keymap('n', 'hS', 'Gitsigns stage_buffer', silent = true, noremap = true)
vim.api.nvim_set_keymap('n', 'hu', 'Gitsigns undo_stage_hunk', silent = true, noremap = true)
vim.api.nvim_set_keymap('n', 'hR', 'Gitsigns reset_buffer', silent = true, noremap = true)
vim.api.nvim_set_keymap('n', 'hp', 'Gitsigns preview_hunk', silent = true, noremap = true)
vim.api.nvim_set_keymap('n', 'hb', 'lua require"gitsigns".blame_linefull=true', silent = true, noremap = true)
vim.api.nvim_set_keymap('n', 'tb', 'Gitsigns toggle_current_line_blame', silent = true, noremap = true)
vim.api.nvim_set_keymap('n', 'hd', 'Gitsigns diffthis', silent = true, noremap = true)
vim.api.nvim_set_keymap('n', 'hD', 'lua require"gitsigns".diffthis("~")', silent = true, noremap = true)
vim.api.nvim_set_keymap('n', 'td', 'Gitsigns toggle_deleted', silent = true, noremap = true)
vim.api.nvim_set_keymap('o', 'ih', ':Gitsigns select_hunk', silent = true, noremap = true)
vim.api.nvim_set_keymap('x', 'ih', ':Gitsigns select_hunk', silent = true, noremap = true)
end

这里是我将官方给出的配置直接粘贴了过来,这堆快捷键定义的操作中我最常用的就是 next_hunkprev_hunk来在各种修改之间进行跳转。虽然偶尔也用用 diffthis来显示差异,但这部分我更喜欢使用我接下来介绍的插件


diffview

这个插件从名字上看就知道是专门用来查看版本差异的插件。与前面介绍的 gitsigns插件相比它有下面几个优点:


  1. 它是专门用来显示差异的,与gitsigns相比,显示的更加明显
  2. 它可以在文件树中显示有变更的文件
  3. 它可以做到任意版本之间的差异对比
  4. 它可以显示单个文件的版本提交记录

它还有另外的功能,可以由各位小伙伴根据官方文档自行了解。
它的使用方式如下:


  • :DiffviewOpen显示当前与上一个版本之间的差异
  • :DiffviewOpen + 版本号 可以显示当期与某一个特定版本的差异,例如 :DiffviewOpen HEAD~2或者:DiffviewOpen 906ddac317来查看版本差异
    :DiffviewFileHistory + 文件名 来查看某个文件的版本差异

    因为它比较简单,具体的用法就不在这里演示了。
    关于它的配置,我自己认为平时很少使用,而且默认的配置已经够用了,也不太需要花精力为它优化快捷键了。

lazygit

lazygit是一个非常好用的git客户端,可以方便的进行提交、回滚、查看变更等git操作。这里我不推荐什么插件,因为它本身已经很强大了,而且脱离vim它也可以很好的工作。想来想去只有配置一个快捷键来快速打开 lazygit 的终端

不知道各位小伙伴是否还记得之间介绍的 toggleterm 插件,我们将要依赖它来快速启动

local lazygitterm = Terminal:new(
cmd = 'lazygit',
direction = 'float'
)
function lazygit_toggle()
lazygitterm:toggle()
end
vim.api.nvim_set_keymap("n", "lg", "lua lazygit_toggle()", noremap = true, silent = true)

通过这样简单的配置我们已经可以使用 lg来快速启动 lazygit的客户端了。

至此我们关于git的配置就完成了。一般我的使用习惯是使用 gitsigns来在更改中进行跳转,用于提交前或者合并分支前的代码审查,做到提交和合并都心中有数。在发生bug要回溯代码并且查看当前与没有问题的版本之间的差异会用到 diffview插件。在进行提交、合并、回溯等git相关操作时会使用到 lazygit。各位小伙伴也可以根据自己的使用习惯来定制这一部分的配置。


推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • Python的参数解析argparse模块的学习
    本文介绍了Python中参数解析的重要模块argparse的学习内容。包括位置参数和可选参数的定义和使用方式,以及add_argument()函数的详细参数关键字解释。同时还介绍了命令行参数的操作和可接受数量的设置,其中包括整数类型的参数。通过学习本文内容,可以更好地理解和使用argparse模块进行参数解析。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
author-avatar
手机用户2602917255
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有